#pragma once

#include "../Headers/log.h"
#include "../Headers/types.h"

#include "ws.functions.h"

#include <string>
#include <map>

namespace TOB {
  namespace WS {
    
    class RequestException {
    public:
      /**
       * Обработчик исключительной ситуации, выводит сообщение об ошибке
       * @param req строка, которую не удалось распарсить
       */
      RequestException(std::string req);
      int errorCode;
    };
    
    class Request {
    private:
      std::string _scheme;
      std::string _host;
      std::string _pathToFile;
      std::map<std::string,std::string> _params;
      TOB::WS::Function::Type _func;
    public:
      /**
       * Парсер строки
       * @param request строка для обработки
       */
      Request(std::string request);
      ~Request();
      /**
       * Возврат значения поля схемы
       */
      std::string getScheme();
      /**
       * Возврат значения поля адреса
       */
      std::string getHost();
      /**
       * Возврат значения поля имени файла
       */
      std::string getPathToFile();
      /**
       * Возврат значения поля параметров
       */
      std::map<std::string, std::string> getParams();
      /**
       * Возврат значения функции для выполнения на сервере
       */
      TOB::WS::Function::Type getFunc();
    };
  }
}
